package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.anno.CacheFind;
import com.jt.mapper.ItemCatMapper;
import com.jt.pojo.ItemCat;
import com.jt.util.ObjectMapperUtil;
import com.jt.vo.EasyUITree;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import redis.clients.jedis.Jedis;

import java.util.ArrayList;
import java.util.List;

@Service
public class ItemCatServiceImpl implements ItemCatService {
    @Autowired(required = false)//required = false意思是jedis对象程序启动时，暂时不进行注入，不是必须的
    private Jedis jedis;
    @Autowired
    private ItemCatMapper itemCatMapper;
    /**
     * 思路:
     * 1.通过parentId查询数据库信息,返回值结果List<ItemCat>
     * 2.将ItemCat信息转化为EasyUITree对象
     * 3.返回的是List<EasyUITree>
     * @param itemCatId
     * @return
     */
    @Override
    public String findItemCatNameById(Long itemCatId) {
        return itemCatMapper.findItemCatNameById(itemCatId);
    }
    /**
     * 思路:
     * 1.通过parentId查询数据库信息,返回值结果List<ItemCat>
     * 2.将ItemCat信息转化为EasyUITree对象
     * 3.返回的是List<EasyUITree>
     * @param parentId
     * @return
     */
    //查询数据库中的代码
    @CacheFind(key="ITEM_CAT_PARENTID",seconds = 100)
    @Override
    public List<EasyUITree> findItemCatList(long parentId) {
        QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("parent_id",parentId);
        List<ItemCat> itemCatslist = itemCatMapper.selectList(queryWrapper);
        //便利数据封装easyuitree
        List<EasyUITree> easyUITreeList = new ArrayList<>();
        //2.需要将数据进行转化. carList遍历 封装EastUITree 添加到集合中即可
        for (ItemCat itemCat : itemCatslist) {
            Long id = itemCat.getId();
            String text = itemCat.getName();
            String status = itemCat.getIsParent()?"closed":"open";
            EasyUITree easyUITree = new EasyUITree(id, text, status);
            easyUITreeList.add(easyUITree);//3.封装返回值数据
        }
        return easyUITreeList;
    }

    /**
     * 步骤：
     * 1、下查询redis：k:v
     *      true    直接返回数据
     *      false   发讯数据库
     * key有什么特点：
     * 1、key应该动态的变化
     * 2、key应该标示业务属性    key=ITEM_CAT_PARENTID::0
     * @param parentId
     * @return
     */
//    @Override
//    public List<EasyUITree> findItemCache(long parentId) {
//        //定义一个空的集合
//        List<EasyUITree> itemCatList = new ArrayList<>();
//        String key = "ITEM_CAT_PARENTID::"+parentId;
//        //从缓存中查询数据
//        String json = jedis.get(key);
//        //校验json中是否有值
//        if (StringUtils.isEmpty(json)){
//            //如果缓存中没有测应该查询数据库
//            itemCatList = findItemCatList(parentId);
//            //为了实现缓存的处理，我们应该将我们的数据添加到redis里
//            //将数据转化为json结构保存到redis中
//            json = ObjectMapperUtil.toJson(itemCatList);
//            jedis.set(key,json);
//            System.out.println("第一次查询数据库，并保存到缓存");
//        }
//        itemCatList = ObjectMapperUtil.toObject(json, itemCatList.getClass());
//        System.out.println("查询redis缓存服务器成功");
//        return itemCatList;
//    }

}
